/**
 * 辅助函数：根据点号分隔的路径获取对象的嵌套属性值
 * @param {Object} obj - 要从中获取属性的对象
 * @param {string} path - 点号分隔的属性路径，例如 'config.title'
 * @returns {*} 嵌套属性的值，如果路径无效或属性不存在则返回 undefined
 */
export function getNestedPropertyValue(obj, path) {
  // 如果对象不是有效对象或路径不是有效字符串，则直接返回 undefined
  if (!obj || typeof obj !== 'object' || !path || typeof path !== 'string') {
    return undefined;
  }

  // 将路径按点号分割成数组
  const parts = path.split('.');
  let current = obj; // 从根对象开始

  // 遍历路径的每个部分
  for (let i = 0; i < parts.length; i++) {
    const part = parts[i];
    // 检查当前值是否为对象且包含当前部分作为其直接属性
    // 使用 Object.prototype.hasOwnProperty.call 确保安全检查
    if (
      current === null ||
      typeof current !== 'object' ||
      !Object.prototype.hasOwnProperty.call(current, part)
    ) {
      return undefined; // 路径无法进一步解析，返回 undefined
    }
    current = current[part]; // 移动到下一个嵌套层级
  }
  return current; // 返回最终获取到的值
}
